package edu.fasta.sisinfo2.builders;

import java.util.ArrayList;
import java.util.List;

import edu.fasta.sisinfo2.juegos.Full;
import edu.fasta.sisinfo2.juegos.Juego;
import edu.fasta.sisinfo2.juegos.Par;
import edu.fasta.sisinfo2.juegos.Trio;
import edu.fasta.sisinfo2.poker.Carta;
import edu.fasta.sisinfo2.poker.Mano;

public class FullBuilder implements BuilderJuegos{

	private BuilderJuegos builderSiguiente;
	
	public FullBuilder(BuilderJuegos builderSiguiente){
		this.setBuilderSiguiente(builderSiguiente);
	}
	
	public Juego buildJuego(Mano mano) {
		List listaDeManos = new ArrayList();
		listaDeManos = mano.combinatoria(); //le paso una mano de siete cartas y me da las combinatorias posibles
		List manoActual = new ArrayList();

		
		for(int i=0; i<listaDeManos.size(); i++){ //recorro todas las manos posibles (21)
			manoActual = (List) listaDeManos.get(i);
			
			int c1 =  ((Carta) manoActual.get(0)).getPuntaje();
			int c2 =  ((Carta) manoActual.get(1)).getPuntaje();
			int c3 =  ((Carta) manoActual.get(2)).getPuntaje();
			int c4 =  ((Carta) manoActual.get(3)).getPuntaje();
			int c5 =  ((Carta) manoActual.get(4)).getPuntaje();
			
			
			if ((c1 == c2) && (c3 == c4) && (c3 == c5)){ //si tengo par y trio
				

				
				Par unPar = new Par((Carta)manoActual.get(0), (Carta)manoActual.get(1));
				Trio unTrio = new Trio((Carta)manoActual.get(2), (Carta)manoActual.get(3), (Carta)manoActual.get(4));
				
				return new Full(unTrio, unPar);
				
			}else{
				if( (c1 == c2) && (c1 == c3) && (c4 == c5) ){
					

					List listaTrio = new ArrayList();
					listaTrio.add(manoActual.get(0));
					listaTrio.add(manoActual.get(1));
					listaTrio.add(manoActual.get(2));
					
					Par unPar = new Par((Carta)manoActual.get(3), (Carta)manoActual.get(4));
					Trio unTrio = new Trio((Carta)manoActual.get(0), (Carta)manoActual.get(1), (Carta)manoActual.get(2));
					
					return new Full(unTrio, unPar);
				}
			}		
			
		}
		return this.getBuilderSiguiente().buildJuego(mano);
	}
	
	public BuilderJuegos getBuilderSiguiente() {
		return builderSiguiente;
	}
	
	public void setBuilderSiguiente(BuilderJuegos builderSiguiente) {
		this.builderSiguiente = builderSiguiente;
	}

	
}
